package org.wj.problem;


/**
 * 第二题，两数相加
 * 描述：
 * 给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
 */
public class AddingTwoNumbers {
	public static void main(String[] args) {
		ListNode l1 = new ListNode(2);
		l1.next = new ListNode(4);
		l1.next.next = new ListNode(3);

		ListNode l2 = new ListNode(5);
		l2.next = new ListNode(6);
		l2.next.next = new ListNode(4);

		ListNode listNode = addTowNumbers(l1, l2);
	}

	public static ListNode addTowNumbers(ListNode l1, ListNode l2) {
		ListNode tempResult = new ListNode(0);

		ListNode result = tempResult;
		int decimal = 0;
		while (true) {
			int val = decimal;
			if (l1 == null && l2 != null) {
				val += l2.val;
			}
			if (l2 == null && l1 != null) {
				val += l1.val;
			}
			if (l1 != null && l2 != null) {
				val = val + l1.val + l2.val;
			}

			int currentVal = val % 10;
			decimal = val / 10;
			tempResult.val = currentVal;

			if (decimal == 0 && (l1 == null || l1.next == null) && (l2 == null || l2.next == null)) {
				break;
			}

			tempResult.next = new ListNode(0);
			tempResult = tempResult.next;

			l1 = l1 != null ? l1.next : null;
			l2 = l2 != null ? l2.next : null;
		}
		return result;
	}

	public static class ListNode {

		int val;
		ListNode next;

		ListNode(int val) {
			this.val = val;
		}

	}

}
